message(NOTICE "开始构建 drogon 模块")
# 检查构建目标是否存在
if(TARGET drogon-${DROGON_TAG})
    message(NOTICE "drogon 模块已存在 drogon-${DROGON_TAG}")
    return()
endif()
include(module/mysql_client_8_0_43_module)
# 检查生成的文件是否存在
existsInstallFiles(
    ${MODULE_STAMP}/drogon/${DROGON_TAG}
    ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}
    drogon-${DROGON_TAG})
# 配置库参数成成规则
set(DROGON_CONFIGURE CACHE STRING "drogon configure" FORCE)
if(BUILD_SHARED_LIBS)
    # 开启 编译动态库 ON
    list(APPEND DROGON_CONFIGURE "-DBUILD_SHARED_LIBS=ON")
else()
    # 关闭 编译动态库 OFF
    list(APPEND DROGON_CONFIGURE "-DBUILD_SHARED_LIBS=OFF")
endif()

# 构建 zlib 库
ExternalProject_Add(
    drogon-${DROGON_TAG}
    PREFIX         ${EXTERNAL_PROJECT_ROOT}                # ✅ 显式设置 prefix 目录
    SOURCE_DIR     ${MODULE_SRC}/drogon/${DROGON_TAG}          # ✅ 显式设置 source 目录
    BINARY_DIR     ${MODULE_BUILD}/drogon/${DROGON_TAG}        # ✅ 显式设置 build 目录
    INSTALL_DIR    ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}  # ✅ 显式设置 install 目录
    STAMP_DIR      ${MODULE_STAMP}/drogon/${DROGON_TAG}        # ✅ 显式设置 stamp 目录
    TMP_DIR        ${MODULE_TMP}/drogon/${DROGON_TAG}          # ✅ 显式设置 tmp 目录

    DOWNLOAD_COMMAND # 下载命令
        COMMAND ${CMAKE_COMMAND}
            -DSOURCE_DIR=<SOURCE_DIR>
            -DGIT_REPOSITORY=${DROGON_REPO}
            -DGIT_TAG=${DROGON_TAG}
            -P ${__DIR}/utils/git.cmake
       COMMAND sh -c "cd <SOURCE_DIR> && git submodule update --init --recursive"
    CONFIGURE_COMMAND

        COMMAND ${CMAKE_COMMAND}
             -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
             -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
             # 标准 C/C++ 编译选项
             -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
             -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
             -DCMAKE_PREFIX_PATH=${SYSTEM_PREFIX}
             -DBUILD_DOC=OFF # 是否生成 Doxygen 文档：否
             -DBUILD_EXAMPLES=OFF # 是否构建测试用例：否
            -DBUILD_CTL=ON    #是否构建 drogon_ctl（代码生成工具）：是
            -DDROGON_ENABLE_CMAKE_FUNCTIONS=ON # 是否启用 CMake 函数：是
            -DUSE_BUNDLED_JSONCPP=ON # 是否使用捆绑的 jsoncpp 库：是
             -DBUILD_MYSQL=ON # 是否构建 MySQL 插件：是
             -DUSE_BUNDLED_LIBS=ON # 是否使用捆绑的库：是
             -DBUILD_SHARED_LIBS=OFF # 是否将 Trantor 编译为共享库：否（即静态库）
              -DUSE_SUBMODULE=ON #  是否将 trantor 作为子模块使用：是
             -DBUILD_YAML_CONFIG=ON # 是否启用 YAML 配置支持：是
             -DHAS_STD_FILESYSTEM_PATH=ON # 是否支持 C++17 std::filesystem：是
             -DUSE_STATIC_LIBS_ONLY=ON # 是否仅使用静态库作为依赖：否
             #-DMARIADB_INCLUDE_DIRS
             #-DMARIADB_INCLUDE_DIRS=${MODULE_INSTALL_DIR}/mariadb/${MARIADB_TAG}/include
             #-DBUILD_POSTGRESQL # 是否构建 PostgreSQL 插件：是
             #-DBUILD_REDIS # 是否构建 Redis 插件：是
             #-DBUILD_SQLITE=ON # 是否构建 SQLite 插件：是
             #unofficial-sqlite3_DIR # SQLite3 依赖库配置路径：未找到
            -S <SOURCE_DIR>                       # ✅ 显式设置 source 目录
            -B <BINARY_DIR>                       # ✅ 显式设置 build 目录
            #${DROGON_CONFIGURE}

    BUILD_COMMAND
        ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${CMAKE_BUILD_TYPE} -j${NPROC}
    INSTALL_COMMAND
        ${CMAKE_COMMAND} --install <BINARY_DIR> --config ${CMAKE_BUILD_TYPE}
            # 将安装文件路径保存到 文件去
            COMMAND ${CMAKE_COMMAND}
            -DINSTALL_DIR=<INSTALL_DIR>
            -DCMAKE_PREFIX_PATH=${SYSTEM_PREFIX}
            -P ${__DIR}/utils/write_install_files.cmake
    # ✅ 启用所有日志（调试必备）
    LOG_DOWNLOAD      OFF                           # 下载日志
    LOG_CONFIGURE     OFF                           # 配置日志
    LOG_BUILD         OFF                           # 构建日志
    LOG_INSTALL       OFF                           # 安装日志
    LOG_OUTPUT_ON_FAILURE ON                       # 失败时自动输出日志
   # 依赖目标 安装需要先安装 automake libtool autopoint
   STEP_TARGETS configure build install # 关键：添加 install 步骤
)

# 创建导入目标
add_library(DROGON::DROGONSTATIC STATIC IMPORTED)
# 导入目标属性设置
set_target_properties(DROGON::DROGONSTATIC PROPERTIES
    VERSION ${DROGON_TAG}
    IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
    IMPORTED_LOCATION ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}/lib/libdrogon.a
    INTERFACE_INCLUDE_DIRECTORIES ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}/include
)
add_dependencies(DROGON::DROGONSTATIC install-libjsoncpp-dev)
add_library(TRANTOR::TRANTORSTATIC STATIC IMPORTED)
# 导入目标属性设置
set_target_properties(TRANTOR::TRANTORSTATIC PROPERTIES
    VERSION ${DROGON_TAG}
    IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
    IMPORTED_LOCATION ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}/lib/libtrantor.a
    INTERFACE_INCLUDE_DIRECTORIES ${MODULE_INSTALL_DIR}/drogon/${DROGON_TAG}/include
)
#依赖库
add_dependencies(DROGON::DROGONSTATIC drogon-${DROGON_TAG})
add_dependencies(drogon-${DROGON_TAG}
 zlib-${ZLIB_TAG}
 install-uuid-dev
mysql-client-${MYSQL_CLIENT_TAG}
)

#apt-get install -y libjsoncpp-dev uuid-dev
